¬
Jim Million    uunet!wiltel!jmillion    November 1992    				              

KeyDownBrowser.palette (v1.0)

KeyDownBrowser.palette is a 3.0  InterfaceBuilder View palette for the NXBrowser subclass KeyDownBrowser. KeyDownBrowser extends NXBrowser to provide Workspace Manager-like response to keyboard entry. Arrow keys may be used for manuevering.  Other keystrokes are interpreted as search criteria within the appropriate column. Selection within the browser by arrow keys or by keystroke matching is equivalent to a single mouse click and sends the action to the target. Pressing the Return key is equivalent to a double-click and sends the double action to the target.  KeyDownBrowser overrides NXBrowser's default arrow key behavior, instead providing the more intuitive behavior found in the Workspace Manager browser.  Rules for keystroke search were modeled after WM as well. (see Notes... below).
¬

Important Files...
¬ KeyDownBrowser.[hm] is the class represented by the palette.
¬ KeyDownMatrix.[hm] is the Matrix class for an instance of KeyDownBrowser. It 
   overrides Matrix' mouseDown: method to make its containing browser First Responder.
¬ KeyDownBrowserInspector.[hm] manages IB Attributes inspection of an instance of 
   KeyDownBrowser.

Notes...
¬  If you prefer NXBrowser's default arrow key handling, modify the keyDown: method to
     call [super keyDown: theEvent] for any arrow key hits.
¬  I've modified WM's arrow key handling in two cases. In WM, it is possible to arrow left
     or right without bringing the newly selected cell into view. KeyDownBrowser will always
     scroll a newly selected cell to visible. If you would prefer WM behavior, modify the 
     leftArrow: and rightArrow: methods and remove the scrollCellToVisible:: methods. Any
     cell selection sends the action. This will be modified to only send action on appropriate
     keyup events as soon as I figure out why I'm not receiving keyup events.
¬ You will need to include KeyDownBrowser.[hm] and KeyDownMatrix.[hm] in any project 
     that uses this palette (or just include the interface file and link against the object files). 
     (OTHER_OFILES in a Makefile.preamble).
¬